// ordinamento generico (bubblesort)


#include <iostream>
using namespace std;


template <class X> void bubble(
					X *items,    // puntatore all'array da ordinare
					int count)   // numero di elementi contenuti nell'array
{
	register int a, b;
	X t;

	for(a=1; a<count; a++)
		for(b=count-1; b>=a; b--)
			if(items[b-1] > items[b]) {
				// scambia gli elementi
				t = items[b-1];
				items[b-1] = items[b];
				items[b] = t;
			}
}


int main()
{
	int iarray[7] = {7, 5, 4, 3, 9, 8, 6};
	double darray[5] = {4.3, 2.5, -0.9, 100.2, 3.0};

	int i;

	cout << "Ecco l'array di interi non ordinato:  ";
	for(i=0;i<7;i++)
		cout << iarray[i] << ' ';
	cout << endl;

	cout << "Ecco l'array di double non ordinato:  ";
	for(i=0;i<5;i++)
		cout << darray[i] << ' ';
	cout << endl;

	bubble(iarray, 7);
	bubble(darray, 5);

	cout << "Ecco l'array di interi ordinato:  ";
	for(i=0;i<7;i++)
		cout << iarray[i] << ' ';
	cout << endl;

	cout << "Ecco l'array di double ordinato:  ";
	for(i=0;i<5;i++)
		cout << darray[i] << ' ';
	cout << endl;

	return 0;
}